package mx.ipn.persistencia.mysql;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Time;
import java.util.ArrayList;

import mx.ipn.persistencia.FabricaDeDAOs;
import mx.ipn.persistencia.dao.BitacoraCastigoChoferDAO;
import mx.ipn.persistencia.dao.ChoferDAO;
import mx.ipn.persistencia.dao.MotivoDAO;
import mx.ipn.persistencia.dao.UsuarioDAO;
import mx.ipn.to.BitacoraCastigoChoferTO;
import mx.ipn.to.ChoferTO;
import mx.ipn.to.MotivoTO;
import mx.ipn.to.UsuarioTO;
import mx.ipn.to.FechaHoraTO;

public class BitacoraCastigoChoferDAOMySQL implements BitacoraCastigoChoferDAO {
	static{FabricaDeDAOsMySQL.iniciaLog(BitacoraCastigoChoferDAOMySQL.class);}

	private static final String INSERT = "INSERT INTO bitacora_castigo_chofer (fecha,hora,descripcion,id_motivo,id_chofer,id_usuario) VALUES(?,?,?,?,?,?)";

	private static final String UPDATE = "UPDATE bitacora_castigo_chofer SET fecha=?,hora=?,descripcion=?,id_motivo=?,id_chofer=?,id_usuario=? WHERE id_operacion=?";

	private static final String FINDBYID = "SELECT * FROM bitacora_castigo_chofer WHERE id_operacion=?";

	private static final String SELECT = "SELECT * FROM bitacora_castigo_chofer";

	private static final String SELECTBYRANGOFECHAHORA = "SELECT * FROM bitacora_castigo_chofer WHERE fecha>=? AND fecha<=? AND hora>=? AND hora<=?";

	private static final String SELECTBYRANGOFECHACHOFER = "SELECT * FROM bitacora_castigo_chofer WHERE fecha>=? AND fecha<=? AND id_chofer=?";

	private static final String SELECTBYRANGOFECHAMOTIVO = "SELECT * FROM bitacora_castigo_chofer WHERE fecha>=? AND fecha<=? AND id_motivo=?";

	private static final String SELECTBYRANGOFECHAUSUARIO = "SELECT * FROM bitacora_castigo_chofer WHERE fecha>=? AND fecha<=? AND id_usuario=?";

	private static final String SELECTBYRANGOFECHAMOTIVOCHOFER = "SELECT * FROM bitacora_castigo_chofer WHERE fecha>=? AND fecha<=? AND id_motivo=? AND id_chofer=?";

	@Override
	public BitacoraCastigoChoferTO findBitacoraCastigoChoferById(int idOperacion) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(FINDBYID);

			ps.setInt(1, idOperacion);

			ResultSet rs = ps.executeQuery();
			FabricaDeDAOs fabricaMySQL = FabricaDeDAOs
					.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);
			UsuarioDAO usuarioDAO = fabricaMySQL.getUsuarioDAO();
			MotivoDAO motivoDAO = fabricaMySQL.getMotivoDAO();
			ChoferDAO choferDAO = fabricaMySQL.getChoferDAO();

			if (rs.next()) {
				idOperacion = rs.getInt("id_operacion");
				java.sql.Date fecha = rs.getDate("fecha");
				java.sql.Time hora = rs.getTime("hora");
				String descripcion = rs.getString("descripcion");

				ArrayList<MotivoTO> listMotivoTO = new ArrayList<MotivoTO>();
				ArrayList<ChoferTO> listChoferTO = new ArrayList<ChoferTO>();
				ArrayList<UsuarioTO> listUsuarioTO = new ArrayList<UsuarioTO>();

				MotivoTO motivoTO = motivoDAO.findMotivoById(rs
						.getInt("id_motivo"));
				ChoferTO choferTO = choferDAO.findChoferById(rs
						.getInt("id_chofer"));
				UsuarioTO usuarioTO = usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario"));

				listMotivoTO.add(motivoTO);
				listChoferTO.add(choferTO);
				listUsuarioTO.add(usuarioTO);

				ChoferTO[] arrChoferTO = (ChoferTO[]) listChoferTO
						.toArray(new ChoferTO[listChoferTO.size()]);
				UsuarioTO[] arrUsuarioTO = (UsuarioTO[]) listUsuarioTO
						.toArray(new UsuarioTO[listUsuarioTO.size()]);
				MotivoTO[] arrMotivoTO = (MotivoTO[]) listMotivoTO
						.toArray(new MotivoTO[listMotivoTO.size()]);

				BitacoraCastigoChoferTO bitacoraCastigoChoferTO = new BitacoraCastigoChoferTO(
						idOperacion, fecha, hora, descripcion, arrMotivoTO,
						arrChoferTO, arrUsuarioTO);
				ps.close();
				conexion.close();
				return bitacoraCastigoChoferTO;
			}
			ps.close();
			conexion.close();
			return null;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public boolean insertBitacoraCastigoChofer(
			BitacoraCastigoChoferTO bitacoraCastigoChoferTO) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(INSERT);

			ps.setDate(1, FechaHoraTO.getFecha(bitacoraCastigoChoferTO.getFecha().toString()));
			ps.setTime(2, FechaHoraTO.getHora(bitacoraCastigoChoferTO.getHora().toString()));
			ps.setString(3, bitacoraCastigoChoferTO.getDescripcion());
			ps.setInt(4, bitacoraCastigoChoferTO.getIdMotivo());
			ps.setInt(5, bitacoraCastigoChoferTO.getIdChofer());
			ps.setInt(6, bitacoraCastigoChoferTO.getIdUsuario());

			ps.executeUpdate();

			ps.close();
			conexion.close();

			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}

	@Override
	public ArrayList<BitacoraCastigoChoferTO> selectBitacoraCastigoChofer() {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(SELECT);

			ResultSet rs = ps.executeQuery();
			FabricaDeDAOs fabricaMySQL = FabricaDeDAOs
					.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);

			MotivoDAO motivoDAO = fabricaMySQL.getMotivoDAO();
			ChoferDAO choferDAO = fabricaMySQL.getChoferDAO();
			UsuarioDAO usuarioDAO = fabricaMySQL.getUsuarioDAO();

			ArrayList<BitacoraCastigoChoferTO> coleccion = null;

			while (rs.next()) {
				if (coleccion == null)
					coleccion = new ArrayList<BitacoraCastigoChoferTO>();

				int idOperacion = rs.getInt("id_operacion");
				java.sql.Date fecha = rs.getDate("fecha");
				java.sql.Time hora = rs.getTime("hora");
				String descripcion = rs.getString("descripcion");

				ArrayList<MotivoTO> listMotivoTO = new ArrayList<MotivoTO>();
				ArrayList<ChoferTO> listChoferTO = new ArrayList<ChoferTO>();
				ArrayList<UsuarioTO> listUsuarioTO = new ArrayList<UsuarioTO>();

				MotivoTO motivoTO = motivoDAO.findMotivoById(rs
						.getInt("id_motivo"));
				ChoferTO choferTO = choferDAO.findChoferById(rs
						.getInt("id_chofer"));
				UsuarioTO usuarioTO = usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario"));

				listMotivoTO.add(motivoTO);
				listChoferTO.add(choferTO);
				listUsuarioTO.add(usuarioTO);

				ChoferTO[] arrChoferTO = (ChoferTO[]) listChoferTO
						.toArray(new ChoferTO[listChoferTO.size()]);
				UsuarioTO[] arrUsuarioTO = (UsuarioTO[]) listUsuarioTO
						.toArray(new UsuarioTO[listUsuarioTO.size()]);
				MotivoTO[] arrMotivoTO = (MotivoTO[]) listMotivoTO
						.toArray(new MotivoTO[listMotivoTO.size()]);

				BitacoraCastigoChoferTO bitacoraCastigoChoferTO = new BitacoraCastigoChoferTO(
						idOperacion, fecha, hora, descripcion, arrMotivoTO,
						arrChoferTO, arrUsuarioTO);

				coleccion.add(bitacoraCastigoChoferTO);
			}
			ps.close();
			conexion.close();

			return coleccion;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public ArrayList<BitacoraCastigoChoferTO> selectByRangoFechaHora(
			Date inicioFecha, Date finFecha, Time inicio, Time fin) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHAHORA);

			ps.setDate(1, inicioFecha);
			ps.setDate(2, finFecha);
			ps.setTime(3, inicio);
			ps.setTime(4, fin);

			ResultSet rs = ps.executeQuery();
			FabricaDeDAOs fabricaMySQL = FabricaDeDAOs
					.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);

			MotivoDAO motivoDAO = fabricaMySQL.getMotivoDAO();
			ChoferDAO choferDAO = fabricaMySQL.getChoferDAO();
			UsuarioDAO usuarioDAO = fabricaMySQL.getUsuarioDAO();

			ArrayList<BitacoraCastigoChoferTO> coleccion = null;

			while (rs.next()) {
				if (coleccion == null)
					coleccion = new ArrayList<BitacoraCastigoChoferTO>();

				int idOperacion = rs.getInt("id_operacion");
				java.sql.Date fecha = rs.getDate("fecha");
				java.sql.Time hora = rs.getTime("hora");
				String descripcion = rs.getString("descripcion");

				ArrayList<MotivoTO> listMotivoTO = new ArrayList<MotivoTO>();
				ArrayList<ChoferTO> listChoferTO = new ArrayList<ChoferTO>();
				ArrayList<UsuarioTO> listUsuarioTO = new ArrayList<UsuarioTO>();

				MotivoTO motivoTO = motivoDAO.findMotivoById(rs
						.getInt("id_motivo"));
				ChoferTO choferTO = choferDAO.findChoferById(rs
						.getInt("id_chofer"));
				UsuarioTO usuarioTO = usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario"));

				listMotivoTO.add(motivoTO);
				listChoferTO.add(choferTO);
				listUsuarioTO.add(usuarioTO);

				ChoferTO[] arrChoferTO = (ChoferTO[]) listChoferTO
						.toArray(new ChoferTO[listChoferTO.size()]);
				UsuarioTO[] arrUsuarioTO = (UsuarioTO[]) listUsuarioTO
						.toArray(new UsuarioTO[listUsuarioTO.size()]);
				MotivoTO[] arrMotivoTO = (MotivoTO[]) listMotivoTO
						.toArray(new MotivoTO[listMotivoTO.size()]);

				BitacoraCastigoChoferTO bitacoraCastigoChoferTO = new BitacoraCastigoChoferTO(
						idOperacion, fecha, hora, descripcion, arrMotivoTO,
						arrChoferTO, arrUsuarioTO);

				coleccion.add(bitacoraCastigoChoferTO);
			}
			ps.close();
			conexion.close();

			return coleccion;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public BitacoraCastigoChoferTO selectByRangoFechaChofer(Date inicioFecha,
			Date finFecha, int idChofer) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			FabricaDeDAOs fabricaMySQL = null;

			MotivoDAO motivoDAO = null;
			ChoferDAO choferDAO = null;
			UsuarioDAO usuarioDAO = null;

			ArrayList<Integer> listIdOperacion = null;
			ArrayList<java.sql.Date> listFecha = null;
			ArrayList<java.sql.Time> listHora = null;
			ArrayList<String> listDescripcion = null;
			ArrayList<MotivoTO> listMotivoTO = null;
			ArrayList<ChoferTO> listChoferTO = null;
			ArrayList<UsuarioTO> listUsuarioTO = null;

			BitacoraCastigoChoferTO bitacoraCastigoChoferTO = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHACHOFER);
			ps.setDate(1, inicioFecha);
			ps.setDate(2, finFecha);
			ps.setInt(3, idChofer);

			ResultSet rs = ps.executeQuery();

			while (rs.next()) {
				if (listIdOperacion == null) {

					listIdOperacion = new ArrayList<Integer>();
					listFecha = new ArrayList<java.sql.Date>();
					listHora = new ArrayList<java.sql.Time>();
					listDescripcion = new ArrayList<String>();
					listMotivoTO = new ArrayList<MotivoTO>();
					listChoferTO = new ArrayList<ChoferTO>();
					listUsuarioTO = new ArrayList<UsuarioTO>();

					fabricaMySQL = FabricaDeDAOs
							.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);

					motivoDAO = fabricaMySQL.getMotivoDAO();
					choferDAO = fabricaMySQL.getChoferDAO();
					usuarioDAO = fabricaMySQL.getUsuarioDAO();

				}
				listIdOperacion.add(rs.getInt("id_operacion"));
				listFecha.add(rs.getDate("fecha"));
				listHora.add(rs.getTime("hora"));
				listDescripcion.add(rs.getString("descripcion"));
				listMotivoTO.add(motivoDAO.findMotivoById(rs
						.getInt("id_motivo")));
				listUsuarioTO.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario")));
			}
			if (listIdOperacion != null) {
				listChoferTO.add(choferDAO.findChoferById(idChofer));

				ChoferTO[] arrChoferTO = (ChoferTO[]) listChoferTO
						.toArray(new ChoferTO[listChoferTO.size()]);
				UsuarioTO[] arrUsuarioTO = (UsuarioTO[]) listUsuarioTO
						.toArray(new UsuarioTO[listUsuarioTO.size()]);
				MotivoTO[] arrMotivoTO = (MotivoTO[]) listMotivoTO
						.toArray(new MotivoTO[listMotivoTO.size()]);
				Integer[] arrIdOperacion = (Integer[]) listIdOperacion
						.toArray(new Integer[listIdOperacion.size()]);
				Date[] arrFecha = (Date[]) listFecha.toArray(new Date[listFecha
						.size()]);
				String[] arrDescripcion = (String[]) listDescripcion
						.toArray(new String[listDescripcion.size()]);
				Time[] arrHora = (Time[]) listHora.toArray(new Time[listHora
						.size()]);

				bitacoraCastigoChoferTO = new BitacoraCastigoChoferTO(
						arrIdOperacion, arrFecha, arrHora, arrDescripcion,
						arrMotivoTO, arrChoferTO, arrUsuarioTO);
			}
			ps.close();
			conexion.close();
			return bitacoraCastigoChoferTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public BitacoraCastigoChoferTO selectByRangoFechaMotivo(Date inicioFecha,
			Date finFecha, int idMotivo) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();
			
			FabricaDeDAOs fabricaMySQL = null;
			

			MotivoDAO motivoDAO = null;
			ChoferDAO choferDAO = null;
			UsuarioDAO usuarioDAO = null;

			ArrayList<Integer> listIdOperacion = null;
			ArrayList<java.sql.Date> listFecha = null;
			ArrayList<java.sql.Time> listHora = null;
			ArrayList<String> listDescripcion = null;
			ArrayList<MotivoTO> listMotivoTO = null;
			ArrayList<ChoferTO> listChoferTO = null;
			ArrayList<UsuarioTO> listUsuarioTO = null;

			BitacoraCastigoChoferTO bitacoraCastigoChoferTO = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHAMOTIVO);
			ps.setDate(1, inicioFecha);
			ps.setDate(2, finFecha);
			ps.setInt(3, idMotivo);

			ResultSet rs = ps.executeQuery();

			while (rs.next()) {
				if (listIdOperacion == null) {

					listIdOperacion = new ArrayList<Integer>();
					listFecha = new ArrayList<java.sql.Date>();
					listHora = new ArrayList<java.sql.Time>();
					listDescripcion = new ArrayList<String>();
					listMotivoTO = new ArrayList<MotivoTO>();
					listChoferTO = new ArrayList<ChoferTO>();
					listUsuarioTO = new ArrayList<UsuarioTO>();

					fabricaMySQL = FabricaDeDAOs
							.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);

					motivoDAO = fabricaMySQL.getMotivoDAO();
					choferDAO = fabricaMySQL.getChoferDAO();
					usuarioDAO = fabricaMySQL.getUsuarioDAO();

				}
				listIdOperacion.add(rs.getInt("id_operacion"));
				listFecha.add(rs.getDate("fecha"));
				listHora.add(rs.getTime("hora"));
				listDescripcion.add(rs.getString("descripcion"));
				listChoferTO.add(choferDAO.findChoferById(rs
						.getInt("id_chofer")));
				listUsuarioTO.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario")));
			}
			if (listIdOperacion != null) {
				listMotivoTO.add(motivoDAO.findMotivoById(idMotivo));

				ChoferTO[] arrChoferTO = (ChoferTO[]) listChoferTO
						.toArray(new ChoferTO[listChoferTO.size()]);
				UsuarioTO[] arrUsuarioTO = (UsuarioTO[]) listUsuarioTO
						.toArray(new UsuarioTO[listUsuarioTO.size()]);
				MotivoTO[] arrMotivoTO = (MotivoTO[]) listMotivoTO
						.toArray(new MotivoTO[listMotivoTO.size()]);
				Integer[] arrIdOperacion = (Integer[]) listIdOperacion
						.toArray(new Integer[listIdOperacion.size()]);
				Date[] arrFecha = (Date[]) listFecha.toArray(new Date[listFecha
						.size()]);
				String[] arrDescripcion = (String[]) listDescripcion
						.toArray(new String[listDescripcion.size()]);
				Time[] arrHora = (Time[]) listHora.toArray(new Time[listHora
						.size()]);

				bitacoraCastigoChoferTO = new BitacoraCastigoChoferTO(
						arrIdOperacion, arrFecha, arrHora, arrDescripcion,
						arrMotivoTO, arrChoferTO, arrUsuarioTO);
			}
			ps.close();
			conexion.close();
			return bitacoraCastigoChoferTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public BitacoraCastigoChoferTO selectByRangoFechaMotivoChofer(
			Date inicioFecha, Date finFecha, int idMotivo, int idChofer) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();
			
			FabricaDeDAOs fabricaMySQL = null;
			

			MotivoDAO motivoDAO = null;
			ChoferDAO choferDAO = null;
			UsuarioDAO usuarioDAO = null;

			ArrayList<Integer> listIdOperacion = null;
			ArrayList<java.sql.Date> listFecha = null;
			ArrayList<java.sql.Time> listHora = null;
			ArrayList<String> listDescripcion = null;
			ArrayList<MotivoTO> listMotivoTO = null;
			ArrayList<ChoferTO> listChoferTO = null;
			ArrayList<UsuarioTO> listUsuarioTO = null;

			BitacoraCastigoChoferTO bitacoraCastigoChoferTO = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHAMOTIVOCHOFER);
			ps.setDate(1, inicioFecha);
			ps.setDate(2, finFecha);
			ps.setInt(3, idMotivo);
			ps.setInt(4, idChofer);

			ResultSet rs = ps.executeQuery();

			while (rs.next()) {
				if (listIdOperacion == null) {

					listIdOperacion = new ArrayList<Integer>();
					listFecha = new ArrayList<java.sql.Date>();
					listHora = new ArrayList<java.sql.Time>();
					listDescripcion = new ArrayList<String>();
					listMotivoTO = new ArrayList<MotivoTO>();
					listChoferTO = new ArrayList<ChoferTO>();
					listUsuarioTO = new ArrayList<UsuarioTO>();

					fabricaMySQL = FabricaDeDAOs
							.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);

					motivoDAO = fabricaMySQL.getMotivoDAO();
					choferDAO = fabricaMySQL.getChoferDAO();
					usuarioDAO = fabricaMySQL.getUsuarioDAO();

				}
				listIdOperacion.add(rs.getInt("id_operacion"));
				listFecha.add(rs.getDate("fecha"));
				listHora.add(rs.getTime("hora"));
				listDescripcion.add(rs.getString("descripcion"));

				listUsuarioTO.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario")));
			}
			if (listIdOperacion != null) {
				listMotivoTO.add(motivoDAO.findMotivoById(idMotivo));
				listChoferTO.add(choferDAO.findChoferById(idChofer));

				ChoferTO[] arrChoferTO = (ChoferTO[]) listChoferTO
						.toArray(new ChoferTO[listChoferTO.size()]);
				UsuarioTO[] arrUsuarioTO = (UsuarioTO[]) listUsuarioTO
						.toArray(new UsuarioTO[listUsuarioTO.size()]);
				MotivoTO[] arrMotivoTO = (MotivoTO[]) listMotivoTO
						.toArray(new MotivoTO[listMotivoTO.size()]);
				Integer[] arrIdOperacion = (Integer[]) listIdOperacion
						.toArray(new Integer[listIdOperacion.size()]);
				Date[] arrFecha = (Date[]) listFecha.toArray(new Date[listFecha
						.size()]);
				String[] arrDescripcion = (String[]) listDescripcion
						.toArray(new String[listDescripcion.size()]);
				Time[] arrHora = (Time[]) listHora.toArray(new Time[listHora
						.size()]);

				bitacoraCastigoChoferTO = new BitacoraCastigoChoferTO(
						arrIdOperacion, arrFecha, arrHora, arrDescripcion,
						arrMotivoTO, arrChoferTO, arrUsuarioTO);

			}
			ps.close();
			conexion.close();
			return bitacoraCastigoChoferTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public BitacoraCastigoChoferTO selectByRangoFechaUsuario(Date inicioFecha,
			Date finFecha, int idUsuario) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();
			
			FabricaDeDAOs fabricaMySQL = null;
			

			MotivoDAO motivoDAO = null;
			ChoferDAO choferDAO = null;
			UsuarioDAO usuarioDAO = null;

			ArrayList<Integer> listIdOperacion = null;
			ArrayList<java.sql.Date> listFecha = null;
			ArrayList<java.sql.Time> listHora = null;
			ArrayList<String> listDescripcion = null;
			ArrayList<MotivoTO> listMotivoTO = null;
			ArrayList<ChoferTO> listChoferTO = null;
			ArrayList<UsuarioTO> listUsuarioTO = null;

			BitacoraCastigoChoferTO bitacoraCastigoChoferTO = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHAUSUARIO);
			ps.setDate(1, inicioFecha);
			ps.setDate(2, finFecha);
			ps.setInt(3, idUsuario);

			ResultSet rs = ps.executeQuery();

			while (rs.next()) {
				if (listIdOperacion == null) {

					listIdOperacion = new ArrayList<Integer>();
					listFecha = new ArrayList<java.sql.Date>();
					listHora = new ArrayList<java.sql.Time>();
					listDescripcion = new ArrayList<String>();
					listMotivoTO = new ArrayList<MotivoTO>();
					listChoferTO = new ArrayList<ChoferTO>();
					listUsuarioTO = new ArrayList<UsuarioTO>();

					fabricaMySQL = FabricaDeDAOs
							.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);

					motivoDAO = fabricaMySQL.getMotivoDAO();
					choferDAO = fabricaMySQL.getChoferDAO();
					usuarioDAO = fabricaMySQL.getUsuarioDAO();

				}
				listIdOperacion.add(rs.getInt("id_operacion"));
				listFecha.add(rs.getDate("fecha"));
				listHora.add(rs.getTime("hora"));
				listDescripcion.add(rs.getString("descripcion"));
				listMotivoTO.add(motivoDAO.findMotivoById(rs
						.getInt("id_motivo")));
				listChoferTO.add(choferDAO.findChoferById(rs
						.getInt("id_chofer")));
			}
			if (listIdOperacion != null) {
				listUsuarioTO.add(usuarioDAO.findUsuarioById(idUsuario));

				ChoferTO[] arrChoferTO = (ChoferTO[]) listChoferTO
						.toArray(new ChoferTO[listChoferTO.size()]);
				UsuarioTO[] arrUsuarioTO = (UsuarioTO[]) listUsuarioTO
						.toArray(new UsuarioTO[listUsuarioTO.size()]);
				MotivoTO[] arrMotivoTO = (MotivoTO[]) listMotivoTO
						.toArray(new MotivoTO[listMotivoTO.size()]);
				Integer[] arrIdOperacion = (Integer[]) listIdOperacion
						.toArray(new Integer[listIdOperacion.size()]);
				Date[] arrFecha = (Date[]) listFecha.toArray(new Date[listFecha
						.size()]);
				String[] arrDescripcion = (String[]) listDescripcion
						.toArray(new String[listDescripcion.size()]);
				Time[] arrHora = (Time[]) listHora.toArray(new Time[listHora
						.size()]);

				bitacoraCastigoChoferTO = new BitacoraCastigoChoferTO(
						arrIdOperacion, arrFecha, arrHora, arrDescripcion,
						arrMotivoTO, arrChoferTO, arrUsuarioTO);

			}
			ps.close();
			conexion.close();
			return bitacoraCastigoChoferTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public short updateBitacoraCastigoChofer(
			BitacoraCastigoChoferTO bitacoraCastigoChoferTO) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(UPDATE);

			ps.setDate(1, FechaHoraTO.getFecha(bitacoraCastigoChoferTO.getFecha().toString()));
			ps.setTime(2, FechaHoraTO.getHora(bitacoraCastigoChoferTO.getHora().toString()));
			ps.setString(3, bitacoraCastigoChoferTO.getDescripcion());
			ps.setInt(4, bitacoraCastigoChoferTO.getIdMotivo());
			ps.setInt(5, bitacoraCastigoChoferTO.getIdChofer());
			ps.setInt(6, bitacoraCastigoChoferTO.getIdUsuario());

			ps.setInt(7, bitacoraCastigoChoferTO.getIdOperacion());

			ps.executeUpdate();

			if (ps.getUpdateCount() == 0) {
				ps.close();
				conexion.close();
				return 0;
			} else {
				ps.close();
				conexion.close();
				return 1;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return (short) -1;
		}
	}

}
